package com.estacionamientos

import org.apache.commons.lang.builder.HashCodeBuilder

class AbstractUsuarioRol implements Serializable {

	AbstractUsuario abstractUsuario
	Rol rol

	boolean equals(other) {
		if (!(other instanceof AbstractUsuarioRol)) {
			return false
		}

		other.abstractUsuario?.id == abstractUsuario?.id &&
			other.rol?.id == rol?.id
	}

	int hashCode() {
		def builder = new HashCodeBuilder()
		if (abstractUsuario) builder.append(abstractUsuario.id)
		if (rol) builder.append(rol.id)
		builder.toHashCode()
	}

	static AbstractUsuarioRol get(long abstractUsuarioId, long rolId) {
		find 'from AbstractUsuarioRol where abstractUsuario.id=:abstractUsuarioId and rol.id=:rolId',
			[abstractUsuarioId: abstractUsuarioId, rolId: rolId]
	}

	static AbstractUsuarioRol create(AbstractUsuario abstractUsuario, Rol rol, boolean flush = false) {
		new AbstractUsuarioRol(abstractUsuario: abstractUsuario, rol: rol).save(flush: flush, insert: true)
	}

	static boolean remove(AbstractUsuario abstractUsuario, Rol rol, boolean flush = false) {
		AbstractUsuarioRol instance = AbstractUsuarioRol.findByAbstractUsuarioAndRol(abstractUsuario, rol)
		instance ? instance.delete(flush: flush) : false
	}

	static void removeAll(AbstractUsuario abstractUsuario) {
		executeUpdate 'DELETE FROM AbstractUsuarioRol WHERE abstractUsuario=:abstractUsuario', [abstractUsuario: abstractUsuario]
	}

	static void removeAll(Rol rol) {
		executeUpdate 'DELETE FROM AbstractUsuarioRol WHERE rol=:rol', [rol: rol]
	}

	static mapping = {
		id composite: ['rol', 'abstractUsuario']
		version false
	}
}
